package pr1.gui;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import pr1.bdd.Genero;
import pr1.bdd.Serie;

public class VerInformacionAdmin extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textFieldInicio;
	private JTextField textFieldFinal;
	private JLabel lblgeneros;

	private JComboBox comboBox;
	private Serie serie;
	private JTextArea nombreSerie;
	private JTextArea titular;
	private JTextArea textArea;

	/**
	 * Create the frame.
	 */
	public VerInformacionAdmin(Serie serie, GUIController gui) {
		super("Información");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.serie = serie;
		setBounds(100, 100, 533, 512);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		String resultado = serie.getNombreSerie();

		JLabel lblGnero = new JLabel("Género: ");
		lblGnero.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblGnero.setBounds(20, 179, 59, 14);
		contentPane.add(lblGnero);

		JLabel lblSinopsis = new JLabel("Sinopsis ");
		lblSinopsis.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblSinopsis.setBounds(10, 235, 69, 14);
		contentPane.add(lblSinopsis);

		textArea = new JTextArea(serie.getSinopsis());
		JScrollPane scrollPane = new JScrollPane(textArea,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(10, 260, 497, 169);
		contentPane.add(scrollPane);

		JButton editar = new JButton("Guardar cambios");
		editar.addActionListener(new CambiosListener(serie, gui));
		editar.setBounds(99, 440, 145, 23);
		contentPane.add(editar);

		JButton btnCerrar = new JButton("Cerrar");
		btnCerrar.addActionListener(new CerrarListener());
		btnCerrar.setBounds(254, 440, 89, 23);
		contentPane.add(btnCerrar);

		titular = new JTextArea(serie.getTitular());
		titular.setBounds(20, 53, 472, 46);
		contentPane.add(titular);

		JButton btnNewButton = new JButton("Añadir");
		btnNewButton.addActionListener(new insertaGeneroListener(serie, gui));
		btnNewButton.setBounds(208, 203, 89, 23);
		contentPane.add(btnNewButton);

		JButton btnNewButton_1 = new JButton("Eliminar");
		btnNewButton_1.addActionListener(new eliminaGeneroListener(serie, gui));
		btnNewButton_1.setBounds(307, 203, 89, 23);
		contentPane.add(btnNewButton_1);

		String[] generos = { "---", "Acción", "Aventura", "Terror", "Comedia",
				"Crímen", "Policiaca", "Ciencia ficción", "Histórica",
				"Política", "Thriller", "Drama" };

		comboBox = new JComboBox(generos);
		comboBox.setBounds(70, 204, 128, 20);
		contentPane.add(comboBox);

		nombreSerie = new JTextArea(resultado);
		nombreSerie.setFont(new Font("Tahoma", Font.BOLD, 25));
		nombreSerie.setBounds(20, 11, 472, 31);
		contentPane.add(nombreSerie);

		lblgeneros = new JLabel(generosString());
		lblgeneros.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblgeneros.setBounds(99, 178, 213, 14);
		contentPane.add(lblgeneros);

		JLabel lblAoDeInicio = new JLabel("Año de inicio:");
		lblAoDeInicio.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblAoDeInicio.setBounds(20, 118, 78, 14);
		contentPane.add(lblAoDeInicio);

		textFieldInicio = new JTextField(Integer.toString(serie
				.getAno_estreno()));
		textFieldInicio.setBounds(151, 115, 47, 20);
		contentPane.add(textFieldInicio);
		textFieldInicio.setColumns(10);

		int anofin = 0;
		anofin = serie.getAno_final();
		if (anofin == 0) {
			textFieldFinal = new JTextField();
		} else {
			textFieldFinal = new JTextField(Integer.toString(serie
					.getAno_final()));
		}

		textFieldFinal.setColumns(10);
		textFieldFinal.setBounds(151, 146, 47, 20);
		contentPane.add(textFieldFinal);

		JLabel lblAoDeFinalizacin = new JLabel("Año de finalización:");
		lblAoDeFinalizacin.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblAoDeFinalizacin.setBounds(20, 154, 121, 14);
		contentPane.add(lblAoDeFinalizacin);

		setVisible(true);
		this.setLocationRelativeTo(null);
	}

	private class CerrarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			setVisible(false);

		}

	}

	private class CambiosListener implements ActionListener {
		private Serie serie;
		private GUIController gui;

		public CambiosListener(Serie serie, GUIController gui) {
			this.serie = serie;
			this.gui = gui;
		}

		@Override
		public void actionPerformed(ActionEvent arg0) {
			int fin = 0;
			if (!textFieldFinal.getText().equals("")) {
				fin = Integer.parseInt(textFieldFinal.getText());
			}
			Serie nuevaSerie = new Serie(nombreSerie.getText(),
					titular.getText(), textArea.getText(),
					Integer.parseInt(textFieldInicio.getText()), fin);
			if (gui.editarSerie(nuevaSerie, serie.getNombreSerie())) {
				JOptionPane.showMessageDialog(new JFrame(),
						"Cambios guardados", "",
						JOptionPane.INFORMATION_MESSAGE, null);
			} else {
				JOptionPane.showMessageDialog(new JFrame(),
						"No se ha podido realizar los cambios", "",
						JOptionPane.ERROR_MESSAGE, null);
			}
			setVisible(false);

		}

	}

	private class insertaGeneroListener implements ActionListener {
		// al cambiar la serie no se pueden conservar los géneros por el
		// constraint del foreign key. Se borran asique hay que conservarlos y
		// añadirlos después de actualizar la serie
		private Serie serie;
		private GUIController gui;
		private ArrayList<Genero> generos;

		public insertaGeneroListener(Serie serie, GUIController gui) {
			this.serie = serie;
			this.gui = gui;
			generos = new ArrayList<Genero>();
		}

		@Override
		public void actionPerformed(ActionEvent e) {

			if (!comboBox.getSelectedItem().toString().equals("---")) {
				if (!serie.getGeneros().contains(
						comboBox.getSelectedItem().toString())) {
					generos.clear();
					generos.add(new Genero(serie.getNombreSerie(), comboBox
							.getSelectedItem().toString()));
					gui.insertarGeneros(generos);
					serie.getGeneros().add(
							comboBox.getSelectedItem().toString());
					lblgeneros.setText(generosString());
				} else
					JOptionPane.showMessageDialog(new JFrame(),
							"El género ya existía", "",
							JOptionPane.ERROR_MESSAGE, null);

			} else
				JOptionPane.showMessageDialog(new JFrame(),
						"Por favor elija un género válido", "",
						JOptionPane.ERROR_MESSAGE, null);

		}

	}

	private class eliminaGeneroListener implements ActionListener {
		private Serie serie;
		private GUIController gui;
		private ArrayList<Genero> generos;

		public eliminaGeneroListener(Serie serie, GUIController gui) {
			this.serie = serie;
			this.gui = gui;
			generos = new ArrayList<Genero>();
		}

		@Override
		public void actionPerformed(ActionEvent e) {

			if (!comboBox.getSelectedItem().toString().equals("---")) {
				if (serie.getGeneros().contains(
						comboBox.getSelectedItem().toString())) {
					gui.eliminarGenero(new Genero(serie.getNombreSerie(),
							comboBox.getSelectedItem().toString()));
					serie.getGeneros().remove(
							comboBox.getSelectedItem().toString());
					lblgeneros.setText(generosString());
				} else
					JOptionPane.showMessageDialog(new JFrame(),
							"La serie no tiene asignado ese género", "",
							JOptionPane.ERROR_MESSAGE, null);

			} else
				JOptionPane.showMessageDialog(new JFrame(),
						"Por favor elija un género válido", "",
						JOptionPane.ERROR_MESSAGE, null);

		}

	}

	private String generosString() {
		StringBuilder sb = new StringBuilder();
		int i = 0;
		String prefix = "";
		while (i < serie.getGeneros().size()) {
			sb.append(prefix);
			prefix = ", ";
			sb.append(serie.getGeneros().get(i));
			i++;
		}

		return sb.toString();

	}

}
